/*********************************************************************************************************************
* TC264 Opensourec Library ����TC264 ��Դ�⣩��һ�����ڹٷ� SDK �ӿڵĵ�������Դ��
* Copyright (c) 2022 SEEKFREE ��ɿƼ�
*
* ���ļ��� TC264 ��Դ���һ����
*
* TC264 ��Դ�� ��������
* �����Ը��������������ᷢ���� GPL��GNU General Public License���� GNUͨ�ù������֤��������
* �� GPL �ĵ�3�棨�� GPL3.0������ѡ��ģ��κκ����İ汾�����·�����/���޸���
*
* ����Դ��ķ�����ϣ�����ܷ������ã�����δ�������κεı�֤
* ����û�������������Ի��ʺ��ض���;�ı�֤
* ����ϸ����μ� GPL
*
* ��Ӧ�����յ�����Դ���ͬʱ�յ�һ�� GPL �ĸ���
* ���û�У������<https://www.gnu.org/licenses/>
*
* ����ע����
* ����Դ��ʹ�� GPL3.0 ��Դ���֤Э�� �����������Ϊ���İ汾
* �������Ӣ�İ��� libraries/doc �ļ����µ� GPL3_permission_statement.txt �ļ���
* ���֤������ libraries �ļ����� �����ļ����µ� LICENSE �ļ�
* ��ӭ��λʹ�ò����������� ���޸�����ʱ���뱣����ɿƼ��İ�Ȩ����������������
*
* �ļ�����          isr
* ��˾����          �ɶ���ɿƼ����޹�˾
* �汾��Ϣ          �鿴 libraries/doc �ļ����� version �ļ� �汾˵��
* ��������          ADS v1.8.0
* ����ƽ̨          TC264D
* ��������          https://seekfree.taobao.com/
*
* �޸ļ�¼
* ����              ����                ��ע
* 2022-09-15       pudding            first version
********************************************************************************************************************/

#include "isr_config.h"
#include "isr.h"


int ZD_flag = 0;
int Machine_LeftOut = 0, Machine_RightOut = 0,left_buc=0;
int LL=0,RR=0;
float Speed_out_left=0,Speed_out_right=0;
int jisqi=0,sudujs=0;
int8 time_PID=0;
//abcd
// **************************** PIT�жϺ��� ****************************
IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY)
{
    interrupt_global_enable(0);                     // �����ж�Ƕ��
    pit_clear_flag(CCU60_CH0);

//    tsl1401_collect_pit_handler();                  // ����CCD�ɼ�
//    Balance_calculation();
//    Encoder_GetVal();
//    ad_normal();
//    imu_change();
    silun_contorl();
//    Speed_Control();
//    Speed_SmoothOut();
//    Angle_Control();
//    PID_CascadeCalc_ZL(0,Encoder_LeftSpeed,Encoder_RightSpeed, Att_Angle.rol,imugyro_y);
//    Machine_LeftOut = ZL_jiaosudu.output + TurnSpeed_Out;
//    Machine_RightOut = ZL_jiaosudu.output - TurnSpeed_Out;
//    Speed_Out(Machine_LeftOut, Machine_RightOut);

//    Speed_out_left = silun_PID_speed_left(Encoder_LeftSpeed);
//    Speed_out_right = silun_PID_speed_right(Encoder_RightSpeed);

//    if(ad_value[1]<200&&ad_value[2]<200&&ad_value[4]<200)
//        Speed_Out(0,0);
//        Speed_Out(-400,-400);
//    Speed_Out(Machine_LeftOut, Machine_RightOut);
//    icm42688_GET();
//        Encoder_GetVal();
//        dl1a_get_distance();

//            if(time_PID>1000)//��ʱ
//                time_PID=1;

//            time_PID++;
              //����ͷѭ��
//            if(time_PID%3==0&&Balance_Test==1&&duanflag!=1)//����ͷѰ��  ������5
//                Turn_PID();
              //���ѭ��
//            if(time_PID%3==0&&(Balance_Test==2||duanflag==1||Ramp_Flag>0))//���Ѱ��//Ramp_Flag==1  ||Cross_Flag==1 ||bmx_flag==1
//                Turn_PID1();
////
//            if(zhi_flag==1||(zhi_flag==2)||zhi_flag==3||Ramp_Flag>0||(Ring_Flag>0)||duanflag>0||(bmx_flag>0&&bmx_flag!=3))//||zhi_flag==3//&&zhi_value_flag!=3zhi_flag==1||
//            {
////                Speed_out = PID_stop_speed_z_Buff(Encoder_LeftSpeed);//Ԫ���ٶȱ仯
////                Speed_out1 = PID_stop_speed_y_Buff(Encoder_RightSpeed);
//                Speed_out= PID_pitch_speed(Encoder_LeftSpeed);//
//                Speed_out1= PID_pitch_speed1(Encoder_RightSpeed);
//            }
////            else if((bmx_flag>0&&bmx_flag!=3&&0))
////            {
////                Speed_out= PID_stop_speed_z_Buff1(Encoder_LeftSpeed);
////                Speed_out1= PID_stop_speed_y_Buff1(Encoder_RightSpeed);
////            }
//            else if(bmx_flag==3||zhi_flag==4)//||zhi_value_flag==3||Ring_Flag>0
//            {
//                Speed_out= PID_stop_speed_z(Encoder_LeftSpeed);//ͣ��
//                Speed_out1= PID_stop_speed_y(Encoder_RightSpeed);
//            }
//            else
//            {
//                Speed_out= PID_pitch_speed(Encoder_LeftSpeed);//
//                Speed_out1= PID_pitch_speed1(Encoder_RightSpeed);
//            }
//
//            Machine_LeftOut=(int)((Speed_out));//
//            Machine_RightOut=(int)((Speed_out1));//
//
//        if(Balance_Test)
//        Speed_Out(Machine_LeftOut, Machine_RightOut); //����ٶ����
//        else
//            Speed_Out(0, 0); //����ٶ����

//    ZLTurn_PID();
////    Turn_PID();
////    Encoder_GetVal();
//    Speed_Control();    //�ٶȻ�
//    Speed_SmoothOut();
//    Angle_Control();
//    PID_Increase();
//
//    Speed_MachineControl();
//    if(Machine_LeftOut > 999)
//        Machine_LeftOut = 999;
//    if(Machine_LeftOut < -999)
//        Machine_LeftOut = -999;
//    if(Machine_RightOut > 999)
//        Machine_RightOut = 999;
//    if(Machine_RightOut < -999)
//        Machine_RightOut = -999;

}


IFX_INTERRUPT(cc60_pit_ch1_isr, 0, CCU6_0_CH1_ISR_PRIORITY)
{
    interrupt_global_enable(0);                     // �����ж�Ƕ��
    pit_clear_flag(CCU60_CH1);
    /* ��ȡ���ٶ�ԭʼ��ֵ */
    imu660ra_get_acc();
    /* ��ȡ������ԭʼ��ֵ */
    imu660ra_get_gyro();
    static uint8 gyr_tims = 0;
    gyr_tims++;
    /* ÿ�����ж����ڽ��������������ں� */
    if(!(gyr_tims%2))
    {
        gyr_tims = 0;
        imu_change();
    }
//    IMU660RA_transition();
//    Balance_calculation();
//    IMU660RA_GYRO_ACCEL_Y_Ang();
//    Attitude_Algorithm();

}

IFX_INTERRUPT(cc61_pit_ch0_isr, 0, CCU6_1_CH0_ISR_PRIORITY)
{
    interrupt_global_enable(0);                     // �����ж�Ƕ��
    pit_clear_flag(CCU61_CH0);
//    Balance_calculation();
//
//    icm_open();
////    Angle_Cal();
////    icm20602_get_acc();
////    icm20602_get_gyro();
//    Encoder_GetVal();
//    ZD_flag++;

//            if(zhi_flag==1&&dl1a_distance_mm>2000)
//                ringvlauemax=1;
//
//            if((zhi_flag==3||(ringvlauemax==1))&&zhi_time<240)
//                zhi_time++;
//

//            if(zhi_time>240)
//                zhi_time=240;



}

IFX_INTERRUPT(cc61_pit_ch1_isr, 0, CCU6_1_CH1_ISR_PRIORITY)
{
    interrupt_global_enable(0);                     // �����ж�Ƕ��
    pit_clear_flag(CCU61_CH1);

}
// **************************** PIT�жϺ��� ****************************


// **************************** �ⲿ�жϺ��� ****************************
IFX_INTERRUPT(exti_ch0_ch4_isr, 0, EXTI_CH0_CH4_INT_PRIO)
{
    interrupt_global_enable(0);                     // �����ж�Ƕ��
    if(exti_flag_get(ERU_CH0_REQ0_P15_4))           // ͨ��0�ж�
    {
        exti_flag_clear(ERU_CH0_REQ0_P15_4);




    }

    if(exti_flag_get(ERU_CH4_REQ13_P15_5))          // ͨ��4�ж�
    {
        exti_flag_clear(ERU_CH4_REQ13_P15_5);




    }
}

IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO)
{
    interrupt_global_enable(0);                     // �����ж�Ƕ��
    if(exti_flag_get(ERU_CH1_REQ10_P14_3))          // ͨ��1�ж�
    {
        exti_flag_clear(ERU_CH1_REQ10_P14_3);



    }

    if(exti_flag_get(ERU_CH5_REQ1_P15_8))           // ͨ��5�ж�
    {
        exti_flag_clear(ERU_CH5_REQ1_P15_8);




    }
}

// ��������ͷpclk����Ĭ��ռ���� 2ͨ�������ڴ���DMA��������ﲻ�ٶ����жϺ���
// IFX_INTERRUPT(exti_ch2_ch6_isr, 0, EXTI_CH2_CH6_INT_PRIO)
// {
//  interrupt_global_enable(0);                     // �����ж�Ƕ��
//  if(exti_flag_get(ERU_CH2_REQ7_P00_4))           // ͨ��2�ж�
//  {
//      exti_flag_clear(ERU_CH2_REQ7_P00_4);
//  }
//  if(exti_flag_get(ERU_CH6_REQ9_P20_0))           // ͨ��6�ж�
//  {
//      exti_flag_clear(ERU_CH6_REQ9_P20_0);
//  }
// }

IFX_INTERRUPT(exti_ch3_ch7_isr, 0, EXTI_CH3_CH7_INT_PRIO)
{
    interrupt_global_enable(0);                     // �����ж�Ƕ��
    if(exti_flag_get(ERU_CH3_REQ6_P02_0))           // ͨ��3�ж�
    {
        exti_flag_clear(ERU_CH3_REQ6_P02_0);
        camera_vsync_handler();                     // ����ͷ�����ɼ�ͳһ�ص�����
    }
    if(exti_flag_get(ERU_CH7_REQ16_P15_1))          // ͨ��7�ж�
    {
        exti_flag_clear(ERU_CH7_REQ16_P15_1);




    }
}
// **************************** �ⲿ�жϺ��� ****************************


// **************************** DMA�жϺ��� ****************************
IFX_INTERRUPT(dma_ch5_isr, 0, DMA_INT_PRIO)
{
    interrupt_global_enable(0);                     // �����ж�Ƕ��
    camera_dma_handler();                           // ����ͷ�ɼ����ͳһ�ص�����
}
// **************************** DMA�жϺ��� ****************************


// **************************** �����жϺ��� ****************************
IFX_INTERRUPT(uart0_tx_isr, 0, UART0_TX_INT_PRIO)
{
    interrupt_global_enable(0);                     // �����ж�Ƕ��
    IfxAsclin_Asc_isrTransmit(&uart0_handle);


}
IFX_INTERRUPT(uart0_rx_isr, 0, UART0_RX_INT_PRIO)
{
    interrupt_global_enable(0);                     // �����ж�Ƕ��
    IfxAsclin_Asc_isrReceive(&uart0_handle);

#if DEBUG_UART_USE_INTERRUPT                        // ������� debug �����ж�
        debug_interrupr_handler();                  // ���� debug ���ڽ��մ����� ���ݻᱻ debug ���λ�������ȡ
#endif                                              // ����޸��� DEBUG_UART_INDEX ����δ�����Ҫ�ŵ���Ӧ�Ĵ����ж�ȥ

}
IFX_INTERRUPT(uart0_er_isr, 0, UART0_ER_INT_PRIO)
{
    interrupt_global_enable(0);                     // �����ж�Ƕ��
    IfxAsclin_Asc_isrError(&uart0_handle);
}

// ����1Ĭ�����ӵ�����ͷ���ô���
IFX_INTERRUPT(uart1_tx_isr, 0, UART1_TX_INT_PRIO)
{
    interrupt_global_enable(0);                     // �����ж�Ƕ��
    IfxAsclin_Asc_isrTransmit(&uart1_handle);
}
IFX_INTERRUPT(uart1_rx_isr, 0, UART1_RX_INT_PRIO)
{
    interrupt_global_enable(0);                     // �����ж�Ƕ��
    IfxAsclin_Asc_isrReceive(&uart1_handle);
    camera_uart_handler();                          // ����ͷ��������ͳһ�ص�����
}
IFX_INTERRUPT(uart1_er_isr, 0, UART1_ER_INT_PRIO)
{
    interrupt_global_enable(0);                     // �����ж�Ƕ��
    IfxAsclin_Asc_isrError(&uart1_handle);

}


// ����2Ĭ�����ӵ�����ת����ģ��
IFX_INTERRUPT(uart2_tx_isr, 0, UART2_TX_INT_PRIO)
{
    interrupt_global_enable(0);                     // �����ж�Ƕ��
    IfxAsclin_Asc_isrTransmit(&uart2_handle);
}
IFX_INTERRUPT(uart2_rx_isr, 0, UART2_RX_INT_PRIO)
{
    interrupt_global_enable(0);                     // �����ж�Ƕ��
    IfxAsclin_Asc_isrReceive(&uart2_handle);
    wireless_module_uart_handler();                 // ����ģ��ͳһ�ص�����

}
IFX_INTERRUPT(uart2_er_isr, 0, UART2_ER_INT_PRIO)
{
    interrupt_global_enable(0);                     // �����ж�Ƕ��
    IfxAsclin_Asc_isrError(&uart2_handle);

}



IFX_INTERRUPT(uart3_tx_isr, 0, UART3_TX_INT_PRIO)
{
    interrupt_global_enable(0);                     // �����ж�Ƕ��
    IfxAsclin_Asc_isrTransmit(&uart3_handle);




}
IFX_INTERRUPT(uart3_rx_isr, 0, UART3_RX_INT_PRIO)
{
    interrupt_global_enable(0);                     // �����ж�Ƕ��
    IfxAsclin_Asc_isrReceive(&uart3_handle);





}
IFX_INTERRUPT(uart3_er_isr, 0, UART3_ER_INT_PRIO)
{
    interrupt_global_enable(0);                     // �����ж�Ƕ��
    IfxAsclin_Asc_isrError(&uart3_handle);





}
// **************************** �����жϺ��� ****************************
